home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / dev / lang / FPL_v147.lha / fpl / HISTORY < prev    next >
Text File  |  1996-08-31  |  13KB  |  353 lines

  1. HISTORY of changes
  2.  
  3. Syntax description:
  4.     * Bug fix
  5.     + New feature
  6.     - Note/change
  7.     : Obsolete/old stuff
  8.  
  9. ------------------------------------------------------------------------------
  10.  
  11. 14.7    * Compiles as shared library on Linux, Solaris and IRIX. Linked
  12.       library on SunOS. More?
  13.  
  14.     * Made returning strings from inside functions work [better]!
  15.       Reported by Jorgen Olmats.
  16.  
  17.     * fplc now deals with #line instructions followed by lines with quoted
  18.       strings as it should.
  19.  
  20.     * fplc did not deal with 'continue' properly until now.
  21.  
  22.     + fplc now shows version number when 'fplc' only is entered.
  23.  
  24. 14.6    - lots
  25.  
  26. 14.3    * conditional expressions ?:-style, were _not_ treated in a good way
  27.       bye the compiler.
  28.  
  29. 14.0    - rename() is from now on only possible on external or exported
  30.       functions due to compiler effeciency decisions.
  31.  
  32.         - expressions like (++name, name++) were *not* taken take of properly
  33.       previously.
  34.  
  35.     - FPL compiler available. Running compiled programs is done
  36.       transparent just as if they were still interpreted.
  37.  
  38. 13.8    * A single character access (from a string) were accepted in places
  39.       where strings are required.
  40.  
  41. 13.7    + If FPLTAG_ISOLATE is used in a fplExecuteXXXX() call, the program
  42.       run can't access nor declare any exported identifiers. Only
  43.       external, internal and those it creates within its own program.
  44.       (FPLTAG_ISOLATE forces all 'export' variables to be treated as
  45.       regular globals.)
  46.  
  47. 13.6    * Fixed a stupid read from NULL that could occur at strange times...
  48.  
  49. 13.5    * Executing files that only declared/exported variables/funcitons
  50.       repeatedly wasn't taken care of properly...
  51.  
  52.     * a fplAddFunction()-call with an already existing name didn't make
  53.       FPL happy... (still doesn't, but now it survives!)
  54.  
  55. 13.4    * rename() to "" returned a very random number.
  56.  
  57.     * The FPLSEND_GETSYMBOL_* didn't work properly if the hash table size
  58.       was altered.
  59.  
  60. 13.3    * fplAddVariable() that added a string with NULL as default string
  61.       did crash.
  62.  
  63. 13.2    * ltostr() didn't work properly on numbers like 1<<31...
  64.  
  65.     + [Amiga] FPLdb is much improved. It's now cabable of showing
  66.       function return codes and a few other things as well as it can be
  67.       controlled through ARexx and even disabled/enabled.
  68.  
  69.     * Setting DEBUG_MODE with the fplReset() or in the fplInit() will now
  70.       switch on/off "global" debug mode. That is everything will be run in
  71.       debug mode. Previously, they only switched it on and off just like
  72.       the 'debug()' function, which made them pretty useless...!
  73.  
  74. 13.1    * External functions that were expected to return a string, but
  75.       didn't, could make FPL rather confused... I even improved
  76.       interpreting speed pretty much when strings are returned from
  77.       external functions.
  78.  
  79.     : [Amiga]
  80.       FPLTAG_LOCKUSED is removed. There is no substitute, but I doubt
  81.       anyone will ever miss it...
  82.  
  83.     * sprintf() now has some better checks when using more %-codes than
  84.       parameters
  85.  
  86.     + 'rename' can change name of already existing identifiers. By using
  87.       this the right way, you can alter the working of *any* already
  88.       written or added function in FPL. Even external or internal ones!!
  89.  
  90.     + exists() returns information about the presence of identifiers.
  91.  
  92. 13.0    + sscanf() is here!
  93.  
  94.     + [Amiga]
  95.       FPLdb version 2 is introduced and needed if you want to debug FPL
  96.       from now on! A couple of new switches and cleaned code have gotten
  97.       be started to create a better and more advanced debugger.
  98.  
  99. 12.6    + The interpreter makes much better assumptions and errors now about
  100.       functions that return optional types. An example, we have a function
  101.       called 'myown()' that has been added by the program to return
  102.       optional string or int. Previously, uses like this caused problems:
  103.         int a;
  104.         a = myown("return string!"); /* this returned a string */
  105.  
  106.     * Removed an error that would occur when an integer was returned
  107.       from a function returning optional type, when FPL expected a string!
  108.  
  109.     * The following little program stopped with 'Out of memory error!':
  110.       string hi()
  111.       {
  112.          string p;
  113.              return p;
  114.           }
  115.       hi();
  116.  
  117.     * Using variable references as parameters to inside functions could
  118.       mess up the return-value of the function!!!
  119.  
  120. 12.5    * A string that ended with a single backslash confused
  121.       fplConvertString().
  122.  
  123. 12.4    + fplStrtol() now accepts NULL in the third parameter.
  124.  
  125. 12.3    * Accessing the first column of an empty string will now generate
  126.       an "Illegal string index error" instead of simply crashing...
  127.  
  128.     * If sprintf() didn't make a string (or a zero-length), FPL could
  129.       write to a stupid address (0x000004) ...
  130.  
  131. 12.2    - FPL now keeps a good control of the "break level". Thereby, it can
  132.       alert much better on breaks with too high level and other illegal
  133.       uses (like using break outside of loops and switches).
  134.  
  135.     * 'continue' is now harder to abuse.
  136.  
  137.     * FPL could loose track of the real line number when passing if()-
  138.       statements that wasn't evaluated.
  139.  
  140.     + Added the FPLSEND_GETVERSION and FPLSEND_GETREVISION to enable
  141.       the FPL library user to get FPL version and revision number.
  142.  
  143. 12.1    * Using nested switch()-statements actually had a high fail ratio
  144.       since FPL would find the 'case' - labels of "inner-level"
  145.       switch()es !
  146.  
  147.     + Included all the xxxxxxxTags() functions to the actual library
  148.       instead of have them as separate stubs. Not made for the Amiga
  149.       library.
  150.  
  151. 12.0    + The previous feature that enables string merging like:
  152.         string a = b + c;
  153.       where b and c are strings, is re-implemented!
  154.  
  155. 11.6    * 'continue' within statements that wasn't within braces didn't
  156.       work as it should!
  157.  
  158. 11.5    * [Amiga] The internal table of funclibs did not survive after the
  159.       program that opened a funclib quit! Now it does...
  160.  
  161.     * [Amiga] Added RESETOPTIONS to the compiler flags to ignore all those
  162.       *stupid* ENV:sc/SCOPTIONS used by people who try to compile FPL...
  163.  
  164. 11.4    * "\x" didn't work with uppercase letters in the hexadecimal number!
  165.  
  166.     * Accessing an array illegally when *not* declaring, made FPL to
  167.       strcpy() a NULL pointer...
  168.  
  169.     * Assigning a string variable like
  170.         string a,b;
  171.         a = b
  172.       where 'b' never was initialized could lead to 'out of memory'!
  173.  
  174. 11.3    + stristr(), stricmp() and strnicmp() were added to the language!
  175.  
  176. 11.2    * Another small fix to break-within-switch. This is the third in a row
  177.       of bugs discovered by Björn when I've been planning to make a public
  178.       release...!
  179.  
  180.     * Argh!! Forgot to check if it really was a break that broke a
  181.       switch(), which made strange results on i.e return()s from within
  182.       switch()es...!
  183.  
  184.     * Breaks within a switch() could get left after the switch() statement
  185.       so that one 'break' happened to break out of several levels!
  186.  
  187.     * Using 'break' with a too high level parameter now results in the
  188.       (much better) 'illegal break' error message...
  189.  
  190. 11.1    Released to Björn for test use in FrexxLink
  191.  
  192.     * The 'break' keyword didn't work in a program like:
  193.       while(1) {
  194.         if(1) {
  195.               if(1)
  196.                 break;
  197.             }
  198.             /* shouldn't reach this but did previously! */
  199.           }
  200.     
  201. 11.0    Pre-release only used by a minimum of people.
  202.  
  203.     * [Amiga] funclib/lib.c didn't remove the "libTest2" function on exit!
  204.  
  205.     * #pragma nocache was no real success if FPL decided that the program
  206.       was subject for caching...
  207.  
  208.     * Cleaned up a bit more, and made more functions return proper error
  209.       messages.
  210.  
  211.     + Seven new error messages have been added to help debugging FPL
  212.       programs. The new ones are more specified of what exactly the error
  213.       is. Of course I remade a few details to make them use the new
  214.       errors. Read the updated (at last) chapter in the documentation!
  215.  
  216. 10.7    * Accessing a string array with i.e foobar[-1] now generates
  217.       'illegal array "foobar" error!' instead of previous 'out of reach
  218.       error!'.
  219.  
  220.     * The since a long time known, but very-hard-to-find bug that made FPL
  221.       loose control of the line number in error messages is now removed.
  222.       It occured in situations like:
  223.  
  224.         if/while ( FALSE )
  225.           STATEMENT;
  226.  
  227.           The newlines between 'STATEMENT' and the following statement were
  228.       then counted twice...!
  229.  
  230.     * A single exported/global string variable that was assigned at
  231.       declaration time wasn't properly taken care of. Later use of the
  232.       variable could lead to crashes!
  233.  
  234. 10.6    * FPLTAG_KIDNAP_CACHED was fixed and should be working now!
  235.  
  236.     - Since we're planning a release (software based on FPL) on OS/2, all
  237.       packages from now is gonna be multi-platform. It means a few things:
  238.       o ASCII formatted docs will be included as well as the .guide ones.
  239.       o Binary versions of FPL.DLL (OS/2) and FPLlib.so (Intel SVR4 UNIX)
  240.         will be included.
  241.       o The archive directory tree now holds the directories bin_amiga/,
  242.         bin_os2/ and bin_svr4/.
  243.  
  244. 10.5    * Assigning a global/exported string variable after it had been
  245.       "globalfied", did cause a crash!
  246.  
  247.     * Deleting a global/exported variable with DelIdentifier was not
  248.       healthy...
  249.  
  250.     + Made both fplDealloc() and fplDealloca() capable of freeing memory
  251.       allcated both with fplAlloc() and fplAlloca(). They're now virtually
  252.       the same function.
  253.  
  254.     + Introducing the FPLREF_ARRAY_RESIZE... This tag to fplReference()
  255.       enables the host program to resize the array to which a reference
  256.       was sent as parameter to a function. I have to increase the library
  257.       version number for the next public/developer release!
  258.  
  259.     * Using 'resize' on arrays that were declared as global/exported
  260.       did result in system crashes!
  261.  
  262.     * Improved the error message when trying to refer to non-existing
  263.       or negative array fields. Could previously easily contain the wrong
  264.       variable name.
  265.       Did the same to illegal 'resize' operations.
  266.  
  267. 10.4    + Added FPLSEND_GETRETURNINT, which returns a pointer to the value
  268.       returned by a program. If no value was returned, this will return
  269.       NULL.
  270.  
  271.     * Fixed the fplExecuteXXXXXX() invokes that allow strings to get
  272.       returned so that the string pointer is set to NULL if a string
  273.       wasn't returned. Previous versions didn't touch the pointer in such
  274.       situations.
  275.  
  276. 10.3    * Fixed another small detail with the nested runnings and failure.
  277.       Nobody has experienced any trouble with it though.
  278.  
  279. 10.2    * Execution of nested files (and an error in a nested level) could
  280.       lead to files being cached accidentaly, which could lead to serious
  281.       confusion!
  282.  
  283. 10.1    + FPL now offers external variables to be added just like functions
  284.       have been a long time. With the function fplAddVariable(), they
  285.       will be added and recognized instantly by FPL. Added variables are
  286.       always read-only, and all reads from them causes the interface
  287.       function to get called as in a regular external function case, and
  288.       the returned value (with 'fplSend()') will be the result of the
  289.       variable read. The fplArgument struct has been extended with an
  290.       extra member which will hold the default variable result, the result
  291.       that will be the variable contents if the interface function doesn't
  292.       return anything.
  293.  
  294.     * Fixed some serious errors when FPL found 'const' variables. It did
  295.       not prevent some changes, and some changes caused peculiar error
  296.       messages!
  297.  
  298.     * Fixed a bug in the fplAllocString() which made the fplReference()
  299.       or fplSend() where the string could be used to cause damage to
  300.       the system's memory list.
  301.  
  302. 10.0    FPL VERSION 10
  303.     ~~~~~~~~~~~~~~
  304.     We've now reached version 10. The version number increase is because
  305.     of the following reasons:
  306.  
  307.     + The expression parsing is now 100% C compatible to the very last
  308.       detail AFAIK!! Expressions like the following are now treated the
  309.       C-style way:
  310.  
  311.       1) if(a++ && b++)...  the right part is only executed if the left
  312.          part was evaluated TRUE
  313.  
  314.       2) if(a++ || b++)... the right part is only executed if the left
  315.          part was evaluated FALSE
  316.  
  317.       3) if(a ? b++ : c++ )... "b++" is only executed if 'a' evaluates
  318.          TRUE, and "c++" if 'a' evaluates FALSE
  319.  
  320.     + FPL now allows array references sent as parameters to functions. Such
  321.       parameters are declared as "int *array[]" or simply "int *[]" for
  322.       integer arrays.
  323.  
  324.     + fplReference() now features:
  325.       FPLREF_TYPE_ARRAY is now a valid type bit returned by the FPLREF_TYPE
  326.       tag.
  327.       FPLREF_ARRAY_ITEM lets you set which array item you want to read or
  328.       write. The strings/ints are still read with the previous tags for
  329.       those purposes (or the new ones described below).
  330.       FPLREF_ARRAY_INFO gives you information about the looks of the
  331.       referenced array variable.
  332.       FPLREF_SET_MY_STRING makes a normal string valid as new string for
  333.       a referenced variable. The length can be set with...
  334.       FPLREF_SET_MY_STRLEN defines the length of the string set with the
  335.       tag above.
  336.  
  337.     + fplInit() features this new tag:
  338.       FPLTAG_PREVENT_RUNNING_SAME which will make FPL to abort any tries
  339.       to run a program that already is cashed. The FPLTAG_REREAD_CHANGES
  340.       tag still works fine with this though.
  341.  
  342.     + fplSend() features these new tags:
  343.       FPLSEND_RESULT which will give fplSend() a long to store results in.
  344.       FPLSEND_IS_FILE_CACHED will give information regarding if the
  345.       specified file is cached (held in memory) or not.
  346.  
  347.     + sprintf() is a new FPL function. Features all ANSI C %-codes plus
  348.       a few additional ones:
  349.       %o - octal number
  350.       %b - binary number
  351.       %n - number of characters
  352.       %P - pointer shown with uppercase letters
  353.